const app = getApp()

import { saleType, publicType } from "../../common/static/api_data.js"
const behavior = require('../relation_behavior')
import { HiddenCall } from '../../request/api.js'
const request = new HiddenCall
import { throttle } from '../../utils/throttle'
Component({
  /**
 *  筛选弹框
 * - @author           狄兆璐
 * - @date             2018-06-30
 * show                 是否打开筛选栏
 * isHouse             是不是房源
 * isPhone             是不是通话列表
 * saleType            状态
 * fileName           筛选文件名
 * isModify            显示修改
 */
  behaviors: [behavior],
  properties: {
    show: Boolean,
    isHouse: String,
    isPhone: {
      type: Boolean,
      value: false
    }
  },
  data: {
    saleType,
    publicType,
    favorite: [],
    showInput: false,
    saveFileBox: "",
    fileName: "",
    isModify: false
  },
  ready () {
    // 获取筛选保存文件列表和收藏列表
    this.bindList()
  },
  methods: {
    /**
     * 选择房客源类型
     */
    saleTypeChange: function (e) {
      // 调用子组件事件
      // 获取房客源类型
      this.setData({
        saleType: e.detail.model,
        utype: e.detail.value
      })
    },
    /**
     * 选择已保存的筛选条件
     * author wl
     */
    conditionChange: function (e) {
      // 清空数据
      this.reset("clear")
      // 房客源类型
      let saleType = this.data.saleType
      // 房源or客源
      let isHouse = this.data.isHouse
      // 获取筛选保存条件
      this.setData({ condition: e.detail.model })
      // 获取要修改的房客源筛选条件
      request[isHouse==='true' ? 'houseFilterGet' : 'customerFilterGet'](e.detail.code).then((res) => {
        // 调用父组件事件渲染筛选条件
        this.triggerEvent('rendering', res)
        // 渲染房客源状态
        this.renderingArr(saleType, res, "1")
        // 渲染收藏夹
        this.renderingArr(this.data.favorites, res)
        // 数据更新，更换修改条件文字，saveFileBox拿到当前筛选文件数据
        this.setData({
          saleType: this.data.saleType,
          saveFileBox: res,
          isModify: true,
          favorites: this.data.favorites
        })
      })
    },
    /**
     * 房客源类型
     */
    typeChange: function (data) {
      this.setData({
        saleType: data.detail.model
      })
    },
    /**
     * 渲染收藏，房客源类型
     * author wl
     */
    renderingArr (data,res, key) {
      let value
      for (let j = 0; j < data.length; j++) {
        // 渲染房客源类型
        if (key) {
          // 房源
          if (this.data.isHouse ==='true') {
            // 替换房源类型
            value = res.jsonData.utype === "出租" ? "租赁" :
              res.jsonData.utype === "出售" ? "买卖" : ""
          } else if (this.data.isHouse === 'false') {
            // 替换客源类型
            value = res.jsonData.utype === "求购" ? "买卖" :
              res.jsonData.utype === "求租" ? "租赁" : ""
          } else {
            return
          }
        } else {
          // 收藏夹值
          value = res.jsonData?res.jsonData.favourite:res
        }
        // 对比相同改变checked属性
        if (data[j].value === value) {
          data[j].checked = true
        } else {
          data[j].checked = false
        }
          this.setData({ favorites: this.data.favorites })
      }
    },
    /**
     * 选择收藏夹
     */
    favoriteChange: function (data) {
      // 调用子组件事件
      // 获取选中的收藏夹
      this.setData({
        favorites: data.detail.model,
        favoriteType: data.detail.value
      })
    },
    /**
     * 获取筛选保存条件，获取收藏夹列表
     */
    bindList: function () {
      // 保存条件
      this.refreshFile()
      // 收藏夹
      // this.favoriteList()
    },
    /**
     * 获取房客源收藏夹列表
     * author wl
     */
    favoriteList: throttle(function() {
      // 检索是房源还是客源
      let isFavorite = this.data.isHouse
      if (!isFavorite) {
        return
      }
      // 判断是房源还是客源，获取收藏夹列表
      request.favouritesList(isFavorite==='true' ? 'house' : 'customer').then(res => {
        if (res) {
          // 更新收藏夹列表
          this.setData({ favorites: res.result })
          // 渲染收藏夹
          if (app.globalData.filterData && app.globalData.filterData.favourite) {
            this.renderingArr(res.result, app.globalData.filterData.favourite)
          }
          if (app.globalData.filterData && app.globalData.filterData.utype) {
            let up = {
              jsonData: { utype: app.globalData.filterData.utype }
            }
            this.renderingArr(this.data.saleType, up, "1")
            this.setData({ saleType: this.data.saleType })
          }
        }
      })
    }, 1000),
    /**
     * 关闭筛选弹窗
     */
    clickMask: function () {
      this.setData({
        show: false
      })
      // 调用父事件关闭筛选弹窗
      this.triggerEvent('clickMask', {})
    },
    /**
     * 新增条件显示输入框，获取条件名称
     * author wl
     */
    showInputFile () {
      // 开启输入框开关，获取输入的值
      this.setData({ 
        showInput: true,
        fileName: this.data.saveFileBox.screeningName ? this.data.saveFileBox.screeningName : ""
      })
    },
    /**
     * 新增筛选条件，筛选查询
     * author wl
     * utype            房客源类型
     * favourite       收藏夹
     * fileName       新增文件名
     * saveFileBox   选中的筛选文件数据
     * confirm         用以判断新增还是筛选
     */
    save: function () {
      // 如果为新增文件名不能为空
      if (this.data.showInput && this.data.fileName === "") {
        wx.showToast({ title: '不能为空哦！', icon: 'none'})
      } else {
        // 汇集数据model
        let model = {
          utype: this.data.utype,
          favourite: this.data.favoriteType,
          fileName: this.data.fileName,
          saveFileBox: this.data.saveFileBox,
          confirm: '1'
        }
        // 关闭新增输入框
        this.setData({ showInput: false })
        // 调用父事件
        this.triggerEvent("save", model)
        // 延迟500毫秒刷新筛选文件
        setTimeout(() => {
          this.refreshFile(true)
        }, 500)
      }
    },
    /**
     * 重置筛选条件数据，临时选择数据
     * author wl
     * saleType            状态
     * favorites            收藏夹
     * condition          筛选保存条件
     * utype                房客源类型
     * fileName          保存文件name
     * isModify           是否出现修改条件按钮
     * favoriteType     收藏类型
     * radioCode        展示隐藏的保存文件选项
     */
    reset: function (clear) {
      // 状态布尔值属性更改
      this.data.saleType ? this.data.saleType.forEach((el) => { delete el.checked }):""
      // 收藏夹布尔值属性更改
      this.data.favorites ? this.data.favorites.forEach((el) => { delete el.checked }) : ""
      // 筛选保存条件布尔值属性更改
      this.data.condition ? this.data.condition.forEach((el) => { delete el.checked }) : ""
      // 重置过后数据更新
      this.setData({
        saleType: this.data.saleType,
        favorites: this.data.favorites ? this.data.favorites : [],
        condition: this.data.condition ? this.data.condition : [],
        utype: "",
        fileName: "",
        saveFileBox: "",
        isModify: false,
        favoriteType: ""
      })
      // 如果有值将保存条件清空
      clear === "clear" ? "" : this.setData({ radioCode: null})
      // 调用父重置事件
      this.triggerEvent("reset")
    },
    /**
     * 确定筛选查询数据
     * author wl
     * utype            房客源类型
     * favourite       收藏夹
     * saveFileBox  选中的筛选文件
     * hide             筛选后关闭筛选栏
     */
    btnClose: function () {
      // 汇集数据
      let model = {
        utype: this.data.utype,
        favourite: this.data.favoriteType,
        saveFileBox: this.data.saveFileBox,
        hide: '1'
      }
      // 调用父事件进行筛选
      this.triggerEvent("save", model)
    },
    /**
     * 获取筛选保存文件列表
     * author wl
     */
    refreshFile: function(show) {
      // 房源还是客源
      let isHouse = this.data.isHouse
      // 是否有值，无值为电话列表
      if(!isHouse) {
        return
      }
      // 根据房客源调取文件列表
      request[isHouse === 'true' ? 'houseFilterList' : 'customerFilterList']().then(res => {
        res.forEach((el) => { 
          // 设置文件属性
          el.code = el.id
          el.checked = false
          // 如果为新增之后，用户输入的文件名字与当前获取文件名字对比
          if (show&&this.data.fileName && (this.data.fileName === el.screeningName)) {
            // 当前文件属性为true高亮
            el.checked = true
            // 将当前的文件数据赋予
            this.setData({ 
              saveFileBox: el,
              radioCode: el.id
            })
          }
        })
        // 更新文件数据
        this.setData({
          condition: res
        })
      })
      // 删除保存文件重置选项
      if (show&&show.type === "refreshFile") {
        // 重置刚删除的数据
        this.reset()
      }
    },
    /**
     * 新增筛选条件，输入获取条件名称
     * author wl
     */
    getFileName (e) {
      this.setData({ fileName: e.detail.value})
    },
    /**
     * 隐藏保存筛选条件输入框
     * author wl
     */
    hideSave () {
      // 为新增则输入框没有值点击其他隐藏输入框
      if (this.data.showInput && this.data.fileName === ""){
        this.setData({ showInput: false })
      }
    }
  }
})
